<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // !10    10*9*8*7*6*5*4*3*2*1 10* !9   .....
        // !9        9*8*7*6*5*4*3*2*1 9 * !8
        // !8          8*7*6*5*4*3*2*1 8 * !7
        // !7            7*6*5*4*3*2*1 7 * !6
        // !6              6*5*4*3*2*1 6 * !5   6*120 
        // !5                5*4*3*2*1 5 * !4   5*24
        // !4                  4*3*2*1 4 * !3   4*6
        // !3                    3*2*1 3 * !2   3*2
        // !2                      2*1 2 * !1   2*1
        // !1                        1     1    1  

        // 递归求阶乘  
        function  jiecheng(num){   // jiecheng(10)
            // 结束条件
            if(num == 1 ){
                return 1
            }
            // 没有达到结束条件  要return 
            return num * jiecheng(num-1);
        }

        // 阶乘5  jiecheng(5)
        //        5*jiecheng(4)
        //        5*4*jiecheng(3)
        //        5*4*3*jiecheng(2)
        //        5*4*3*2*jiecheng(1) 
        //        5*4*3*2*1

        alert(jiecheng(10))


        // 递归   辗转相除求最大公约数  
        //  24  9 
        // 24 % 9 = 6
        // 9 % 6 = 3
        // 6 % 3 = 0

        // 9 % 24 = 9
        // 24 % 9 = 0
        
        function gcd(num1,num2){
            if(num1 % num2 === 0){
                return num2
            }
            return gcd(num2,num1%num2);
        }

        alert(gcd(9,24));

        // 1.先写函数 
        // 2.写结束条件
        // 3. 没有达到结束条件 return  

        // 递归函数 其实就是一个循环  一定要 写好结束的条件  
        // 递归函数只不过是给我们多了一个解决方法方案
        // 递归函数调用自己有次数限制 
        // 如果次数大于100 可能会报错  



    </script>
</body>
</html>